package com.castle.fortress.admin.flowable.form.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.castle.fortress.admin.flowable.form.dto.FlowableFormColDto;
import com.castle.fortress.admin.flowable.form.dto.FlowableFormConfigDto;
import com.castle.fortress.admin.flowable.form.entity.FlowableFormConfigEntity;
import com.castle.fortress.admin.form.dto.FormModelDto;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 表单配置管理 服务类
 *
 * @author castle
 * @since 2022-09-27
 */
public interface FlowableFormConfigService extends IService<FlowableFormConfigEntity> {

    /**
     * 分页展示表单配置管理列表
     * @param page
     * @param flowableFormConfigDto
     * @return
     */
    IPage<FlowableFormConfigDto> pageFlowableFormConfig(Page<FlowableFormConfigDto> page, FlowableFormConfigDto flowableFormConfigDto);

    /**
    * 分页展示表单配置管理扩展列表
    * @param page
    * @param flowableFormConfigDto
    * @return
    */
    IPage<FlowableFormConfigDto> pageFlowableFormConfigExtends(Page<FlowableFormConfigDto> page, FlowableFormConfigDto flowableFormConfigDto);
    /**
    * 表单配置管理扩展详情
    * @param id 表单配置管理id
    * @return
    */
    FlowableFormConfigDto getByIdExtends(Long id);

    /**
     * 展示表单配置管理列表
     * @param flowableFormConfigDto
     * @return
     */
    List<FlowableFormConfigDto> listFlowableFormConfig(FlowableFormConfigDto flowableFormConfigDto);

    /**
     * 转换为数据库模型
     * @param formConfigEntity
     * @return
     */
    FormModelDto convertToModel(FlowableFormConfigEntity formConfigEntity);

    /**
     * 切换绑定状态
     * @param id
     * @param isBind
     */
    void updateBindStatus(Long id,Integer isBind);

    /**
     * 将数据库字段配置解析为map
     * @param tbContent
     * @return
     */
    Map<String, Map<String,String>> parseTbContentData(String tbContent);

    /**
     *  //根据 流程ID 获取 模板 对应 的 配置信息
     * @param flowId
     * @return
     */
    FlowableFormConfigDto getByFlowId(Long flowId);

    /**
     * 依据流程表单ID获取流程表单字段列表
     * @param id 表单ID
     * @return
     */
    List<FlowableFormColDto> getColsById(Long id);

    void removeByFlowableIds(List<Long> ids);

    void removeByAppIds(List<Long> ids);

    /**
     * 依据id查询，忽略逻辑删除
     * @param id
     * @return
     */
    FlowableFormConfigEntity selByIdIgnoreDel(Serializable id);
}
